package thread;

/**
 * 协调线程的同步运行可以使用线程的join方法
 * 该方法允许一个线程在另一个线程上等待,知道该线程结束后才会结束等待继续其后工作
 * <p>
 * 同步运行:多写个线程执行在了先后顺序
 */
public class JoinDemo {
    //标识图片是否下载完毕
    private static boolean isFinish = false;

    public static void main(String[] args) {
        Thread download = new Thread() {
            @Override
            public void run() {
                System.out.println("开始下载图片....");
                for (int i = 0; i < 100; i++) {
                    System.out.println("down:" + i + "%");
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                    }
                }
                System.out.println("down:图片下载完毕!");
                isFinish = true;
            }
        };
        Thread show = new Thread() {
            @Override
            public void run() {
                System.out.println("开始显示商品列表");
                System.out.println("显示列表中的文字");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                }
                System.out.println("列表中的文字显示完毕!");
                System.out.println("开始显示图片!");
                //等待download执行完毕
                try {
                    /*
                        show线程执行到这里是会进入阻塞状态,直到download结束才会结束阻塞.
                     */
                    download.join();
                } catch (InterruptedException e) {
                }
                if (!isFinish) {
                    throw new RuntimeException("图片加载失败!");
                }
                System.out.println("图片显示完毕!");
            }
        };
        download.start();
        show.start();
    }
}
